Mybatis之QBC风格

QBC 风格:Query By Criteria 一种查询方式,比较面向对象,看不到sql语句。

这里记录一下关于MyBatis中Example的and和or的使用,主要是如下两种场景:

  • where (条件1 and 条件2) or (条件3 and 条件4)
  • where (条件1 and 条件2) and (条件3 or 条件4)

where (条件1 and 条件2) or (条件3 and 条件4)

1
2
3
4
5
6
7
8
//条件1 and 条件2
example.createCriteria()
.andEqualTo("isDeleted",IsDeleted.NOT_DELETED)
.andEqualTo("name", projectCatalogEntity.getName());
//or (条件3 and 条件4)
example.or(example.createCriteria()
.andEqualTo("isDeleted",IsDeleted.NOT_DELETED)
.andEqualTo("code", projectCatalogEntity.getCode()));

WHERE ( is_deleted = ? and name = ? ) or ( is_deleted = ? and code = ? )

where (条件1 and 条件2) and (条件3 or 条件4)

1
2
3
4
5
6
7
8
//条件1 and 条件2
example.createCriteria()
.andEqualTo("isDeleted",IsDeleted.NOT_DELETED))
.andEqualTo("parentId", projectCatalogEntity.getParentId());
//and (条件3 or 条件4)
example.and(example.createCriteria()
.andEqualTo("name", projectCatalogEntity.getName())
.orEqualTo("code", projectCatalogEntity.getCode()));

WHERE ( is_deleted = ? and parent_id = ? ) and ( name = ? or code = ? )

显示定义条件构造器

上述QBC查询代码中使用了链式编程方式,省去了Example.Criteria对象的创建。

多条件查询时,可以直接使用同一个条件构造器(不知道这个Example.Criteria criteria叫什么,就暂且叫他构造器),往里面直接添加条件就行.

多重条件查询时,如上面的两个括号中的条件都要分别满足时,可以分别创建条件构造器,然后分别往里添加条件

1
2
Example.Criteria criteria = example.createCriteria();
Example.Criteria criteria2 = example.createCriteria();

两个括号之间(也就是两个条件构造器之间)使用example的and或or来连接

1
2
example.and(criteria2);
example.or(criteria2);
文章作者: GeYu
文章链接: https://nuistgy.github.io/2023/02/15/mybatis QBC风格查询/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Yu's Blog